#include <myheader_c_plus.h>
using std::cout;
using std::endl;
//-> *的运算符重载
class Data{
private:
    int _data = 10;
public:
    Data(){}
    ~Data(){}
    int getData(){
        return _data;
    }
    friend class MiddleLayer; 
};


//第二层级
class MiddleLayer{
private:
    Data * _pdata;
public:
    MiddleLayer(Data *p)
    :_pdata(p)
    {

    }

    ~MiddleLayer(){
        if(_pdata != nullptr){
            delete _pdata;
            _pdata = nullptr;
        }
    }

    //对->运算符进行重载,因为是箭头，所以返回的是一个指针形式
    Data * operator->(){
        return _pdata;
    }
    
    //对*运算符进行重载，因为是解引用，所以返回的是一个类对象
    Data & operator*(){
        return *_pdata;
    }

};


//引入第三层级
int main(int argc, char *argv[])
{
    MiddleLayer ml(new Data);
    cout <<  ml->getData() << endl;
    cout << (*ml).getData() << endl;
    return 0;
}

